package com.zhongwang.mms.module.tool.listner;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zhongwang.mms.module.tool.callback.AccToolCallBack;
import com.zhongwang.mms.module.tool.dao.AccToolDao;
import com.zhongwang.mms.module.tool.model.AccToolModel;
import com.zhongwang.mms.module.tool.model.ReportAccToolModel;
import com.zhongwang.mms.util.ShiroUtils;

import java.util.ArrayList;
import java.util.List;

public class AccToolListener  extends AnalysisEventListener<ReportAccToolModel> {
    private AccToolDao accToolDao;
    private AccToolCallBack accToolCallBack;
    private List<ReportAccToolModel> reportAccToolModel=new ArrayList<>();
    private Integer fkTypeId;
    private String toolMonth;

    public AccToolListener(AccToolDao accToolDao,Integer fkTypeId,String toolMonth,AccToolCallBack accToolCallBack){
        this.accToolDao=accToolDao;
        this.accToolCallBack=accToolCallBack;
        this.fkTypeId=fkTypeId;
        this.toolMonth=toolMonth;
    }
    @Override
    public void invoke(ReportAccToolModel data, AnalysisContext context){
        /**
         * 验证 资产编号、设备名称，数量其他的都可以为空。
         */
        if (data.getToolCode() == null || data.getToolName() == null || data.getToolNum() == null) {
            //不合格的数据往这个里放。
            reportAccToolModel.add(data);
            return;
        }
        data.setFkTypeId(fkTypeId);
        data.setToolMonth(toolMonth);
        /**
         * 设置人员信息和删除标识
         */
        data.setToolIsdelete(0);
        ReportAccToolModel keyModel = new ReportAccToolModel();
        //根据资产编号查询
        keyModel.setToolCode(data.getToolCode());
        keyModel.setFkTypeId(fkTypeId);
        keyModel.setToolMonth(toolMonth);
        AccToolModel checkModel= accToolDao.selectAccTool(keyModel);
        if (checkModel != null) {
            data.setToolId(checkModel.getToolId());
            //执行修改，不存在序号的问题。
            data.setToolUpdUser(ShiroUtils.getUser().getName());
            accToolDao.update(data);
        }else{
            //需要查询最大的序号，间隔为10。
            data.setToolSortNum(accToolDao.selectMaxNum());
            data.setToolCreUser(ShiroUtils.getUser().getName());
            data.setToolUpdUser(ShiroUtils.getUser().getName());
            accToolDao.insert(data);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        if (reportAccToolModel.size() > 0) {
            accToolCallBack.onWarning(reportAccToolModel);
        } else {
            accToolCallBack.onSuccess();
        }
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) {
        accToolCallBack.onError();
    }
}